package com.jiukuaidao.zhulin;

import android.app.Application;
import android.content.Context;

import com.baidu.mapapi.SDKInitializer;
import com.facebook.stetho.Stetho;
import com.jiukuaidao.library.Config;
import com.jiukuaidao.library.common.AppException;
import com.jiukuaidao.library.config.db.impl.ZLDBConfig;
import com.jiukuaidao.library.util.DBUtils;
import com.jiukuaidao.library.util.ImageGlideUtils;
import com.jiukuaidao.library.util.Utils;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Author : BinarySatan
 * Date : 2016/5/20
 * Description :
 */
public class AppContext extends Application {

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化异常管理类
        init();
    }


    private void init() {
        mContext = com.jiukuaidao.library.Config.mContext = this;
        if (Utils.inUIProcess(this)) {
            initBaiDuMap();
            initRealm();
            if (Config.Debug) {
                Stetho.initializeWithDefaults(this);
            }
            catchGloabException();
        }
    }

    private void initBaiDuMap() {
        SDKInitializer.initialize(this);
    }

    private void initRealm() {
        ExecutorService es = Executors.newSingleThreadExecutor();
        es.execute(new Runnable() {
            @Override
            public void run() {
                DBUtils.setDefaultConfig(new ZLDBConfig());
            }
        });
    }

    /**
     * 当系统内存不足 进行的回调
     * <p/>
     * 内存不足,并且该进程在后台进程列表中最后一个,表示马上要被清除
     * TRIM_MEMORY_COMPLETE:
     * <p/>
     * 内存不足, 该进程在进程列表的中部。
     * TRIM_MEMORY_MODERATE:
     * <p/>
     * 内存不足,并且该进程是后台进程
     * TRIM_MEMORY_BACKGROUND:
     * <p/>
     * 表示应用程序所有UI界面被隐藏,如按"HOME"、"BACK"导致UI不可见,这时应该释放一些资源.
     * TRIM_MEMORY_UI_HIDDEN:
     * <p/>
     * 表示应用正常运行,并且不会被杀掉,但是目前手机内存有点低,系统可能会开始根据LRU来杀死进程
     * TRIM_MEMORY_RUNNING_MODERATE:
     * <p/>
     * 表示应用正常运行,并且不会被杀掉,但是目前手机内存已经非常低,要去释放一些不必要的资源。
     * TRIM_MEMORY_RUNNING_LOW:
     * <p/>
     * 应用正常运行,但是系统已经根据LRU 开始杀缓存进程了, 如若需要, 还会杀死正在运行的进程,如后台运行的服务
     * TRIM_MEMORY_RUNNING_CRITICAL:
     *
     * @param level
     */
    @Override
    public void onTrimMemory(int level) {

        if (level > TRIM_MEMORY_MODERATE) {
            // 清楚图片缓存
            ImageGlideUtils.ClearCache(AppContext.this);
        }

        super.onTrimMemory(level);
    }

    public static Context getContext() {
        return mContext;
    }

    /**
     * 注册全局的异常处理机制
     */
    private void catchGloabException() {
        Thread.setDefaultUncaughtExceptionHandler(new AppException.Builder()
//                .activity(MainActivity.class)
                .context(this)
                .isSaveLog(Config.SAVELOG)
                .build());
    }


}
